// 包含类的头文件，声明了 DatabaseSettingWindow 类及其成员
#include "DatabaseSettingWindow.h"

// 引入垂直布局管理器（QVBoxLayout）、基础 QWidget、调试输出模块
#include <QVBoxLayout>
#include <QWidget>
#include <QtDebug>

// 构造函数：DatabaseSettingWindow
// 参数 parent：父窗口指针，默认为空指针
DatabaseSettingWindow::DatabaseSettingWindow(QWidget *parent)
        : QMainWindow(parent)  // 初始化基类 QMainWindow
{
    // 设置窗口标题
    this->setWindowTitle("数据库连接设置");

    // 设置窗口初始显示位置（x=100, y=100）和大小（宽=400，高=200）
    this->setGeometry(100, 100, 400, 200);

    // 创建一个中央控件，用作主窗口的内容区域
    QWidget *central = new QWidget(this);
    this->setCentralWidget(central);  // 将其设为中央控件

    // 创建一个垂直布局器，并设置为中央控件的布局管理器
    QVBoxLayout *layout = new QVBoxLayout(central);

    // 创建主机输入框，并设置提示文本
    hostEdit = new QLineEdit;
    hostEdit->setPlaceholderText("请输入数据库主机");

    // 添加标签和输入框到布局中
    layout->addWidget(new QLabel("主机地址："));
    layout->addWidget(hostEdit);

    // 创建端口输入框，并设置提示文本
    portEdit = new QLineEdit;
    portEdit->setPlaceholderText("请输入端口号");

    // 添加标签和输入框到布局中
    layout->addWidget(new QLabel("端口号："));
    layout->addWidget(portEdit);

    // 创建对话框按钮框 QDialogButtonBox，用于放置标准按钮
    dbb = new QDialogButtonBox(this);

    // 添加标准的“确定”和“取消”按钮
    dbb->addButton(QDialogButtonBox::Ok);
    dbb->addButton(QDialogButtonBox::Cancel);

    // 创建一个自定义按钮 “连接测试”
    testButton = new QPushButton("连接测试");

    // 将自定义按钮添加到按钮框，按钮角色为 ActionRole（自定义功能）
    dbb->addButton(testButton, QDialogButtonBox::ActionRole);

    // 将按钮框添加到垂直布局中
    layout->addWidget(dbb);

    // 连接按钮点击信号和槽函数
    // SIGNAL(clicked(QAbstractButton*)) 表示按钮被点击时触发
    // SLOT(onButtonClicked(QAbstractButton*)) 表示调用的槽函数
    connect(dbb, SIGNAL(clicked(QAbstractButton*)), this, SLOT(onButtonClicked(QAbstractButton*)));
}

// 析构函数：DatabaseSettingWindow
DatabaseSettingWindow::~DatabaseSettingWindow()
{
    // 默认析构，无需手动释放 Qt 控件资源（Qt 会自动管理子对象）
}

// 槽函数：onButtonClicked
// 参数 bt：被点击的按钮指针（类型为 QAbstractButton*）
void DatabaseSettingWindow::onButtonClicked(QAbstractButton *bt)
{
    // 如果点击的是“确定”按钮（QDialogButtonBox::Ok）
    if (bt == dbb->button(QDialogButtonBox::Ok))
    {
        // 输出调试信息，打印用户输入的主机地址和端口号
        qDebug() << "点击了【确定】，保存主机：" << hostEdit->text() << ", 端口：" << portEdit->text();

        // 关闭当前窗口
        close();
    }
        // 如果点击的是“取消”按钮（QDialogButtonBox::Cancel）
    else if (bt == dbb->button(QDialogButtonBox::Cancel))
    {
        // 输出调试信息
        qDebug() << "点击了【取消】，关闭窗口";

        // 关闭当前窗口
        close();
    }
        // 如果点击的是自定义按钮 testButton（“连接测试”）
    else if (bt == testButton)
    {
        // 输出调试信息，模拟进行数据库连接测试
        qDebug() << "测试连接中 → 主机:" << hostEdit->text() << ", 端口:" << portEdit->text();

        // 实际项目中这里可调用数据库连接逻辑
    }
}
/*
 * | 参数/变量名       | 类型                  | 说明                    |
| ------------ | ------------------- | --------------------- |
| `parent`     | `QWidget*`          | 父窗口指针，Qt 的标准窗口构造参数    |
| `hostEdit`   | `QLineEdit*`        | 用户输入主机地址的文本框          |
| `portEdit`   | `QLineEdit*`        | 用户输入端口号的文本框           |
| `dbb`        | `QDialogButtonBox*` | Qt 的标准按钮框容器，用于放置对话框按钮 |
| `testButton` | `QPushButton*`      | 自定义按钮“连接测试”           |
| `bt`         | `QAbstractButton*`  | 被点击的按钮指针，用于判断触发来源     |

 *
 *
 * */